package com.wish.g3.account.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * 支付订单表（支付流水信息）
 * </p>
 *
 * @author wish
 * @since 2022-11-23
 */
@TableName("tb_pay_order")
public class PayOrder implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 支付订单号
     */
    private String orderNo;

    /**
     * 交易账户：更改为相关商户名称
     */
    private String tradeAccount;

    /**
     * 交易账户类型：暂定1:微信，2:支付宝，3:银行卡，4:拉卡拉（微信扫码和H5都是微信，支付宝扫码就是支付宝，认证就是银行卡，提现的时候是拉卡拉）
     */
    private Integer tradeAccountType;

    /**
     * 交易账号（出端的账号：如果是快捷支付：银行卡号，如果是支付宝微信扫码支付，因为取不到微信或者支付宝账号，拉卡拉返回的charge对象里面会返回一个发起支付的IP地址，所以暂定就用这个IP地址。提现的时候：拉卡拉的企业账户）
     */
    private String tradeAccountNo;

    /**
     * 用户ID：根据类型来判断是哪种客户的ID(不一定是登录客户，而是这笔交易的对象)	租客付款的时候，是租客，企业充值提现是企业businessid
     */
    private Long userId;

    /**
     * 交易涉及用户类型：1：租客个人用户（前端客户），2：企业商户（businessID）
     */
    private Integer userType;

    /**
     * 操作类型：1：充值（企业充值），2：提现（企业提现），3：收款（企业收款计划），4：付款（企付款款计划）
     */
    private Integer operationType;

    /**
     * 支付方式, 1:微信扫码，2:支付宝扫码，3:微信公众号，4:认证支付，5:实时代付到银行卡，20:批量代付到银行卡
     */
    private Integer payWay;

    /**
     * 订单金额：支付订单金额
     */
    private BigDecimal amount;

    /**
     * 支付金额：用来记录用户实际支付金额，目前=订单金额就行。
     */
    private BigDecimal payAmount;

    /**
     * 结算金额：平台这边定义字段，暂时不设值，拉卡拉对账文件里面也会有，存到导入的表里面，对账的时候显示拉卡拉那边的结算金额
     */
    private BigDecimal finalAmount;

    /**
     * 优惠金额， 预留字段
     */
    private BigDecimal discountAmount;

    /**
     * 交易对手：入金(提现以外)的时候：海链物联，出金（提现）的时候是商户名称。
     */
    private String tradeUser;

    /**
     * 对手账号：入金的时候：海链的拉卡拉账号，出的时候是商户对应银行卡号（目前只有提现）。
     */
    private String dsAccount;

    /**
     * 交易渠道：暂时固定拉卡拉。
     */
    private String tradeQudao;

    /**
     * 渠道订单号：拉卡拉生成的订单号，具体什么时候回传需要调查。
     */
    private String qudaoOrderNo;

    /**
     * 交易结果：接口回调或者返回的结果 1:处理中，2:成功，3:失败。
     */
    private Integer tradeResult;

    /**
     * 返回码：系统记录，界面不展示。(充值或提现失败时的错误码)
     */
    private String returnCode;

    /**
     * 返回信息(充值或提现失败时的错误消息)
     */
    private String returnMsg;

    /**
     * 发起交易日期：调用拉卡拉下单时间。
     */
    private LocalDateTime tradeDateFq;

    /**
     * 执行交易日期：确认支付时间（认证支付的时候，输完三要素，确认支付按钮按下的时间，也即最后一次掉拉卡拉接口时间），扫码的时候因为是用户主动付款，不经过平台获取不到该时间，故没有不显示。
     */
    private LocalDateTime tradeDateZx;

    /**
     * 渠道支付时间：回调告诉系统处理结果的时间，如果回调参数里面没有就取系统时间。
     */
    private LocalDateTime tradeDateZf;

    /**
     * 支付截止日期：订单有效时间计算，二维码三分钟，H5因为是系统通知微信，所以自己传的时间，没穿就是空。其它都是1小时。根据发起交易日期来计算。
     */
    private LocalDateTime tradeDateJz;

    /**
     * 费率, 预留字段
     */
    private BigDecimal tradeRate;

    /**
     * 手续费, 预留字段
     */
    private BigDecimal commissionFee;

    /**
     * 开始时间，设定为记录创建时间，作为业务开始时间
     */
    private LocalDateTime beginTime;

    /**
     * 结束时间，最后一次业务处理时间，比如支付回调以后
     */
    private LocalDateTime endTime;

    /**
     * 审核状态：1=待审核，2=审核通过，3=审核不通过，100=系统自动审核，预留字段，暂时自动设置为100
     */
    private Integer checkState;

    /**
     * 审核时间，预留字段，暂时自动设置为记录创建的系统时间
     */
    private LocalDateTime checkTime;

    /**
     * 审核用户ID
     */
    private String checkUserid;

    /**
     * 审核失败原因
     */
    private String checkFailReason;

    /**
     * 外部订单号：微信/支付宝/银联的交易号，预留字段，目前同渠道订单号，暂时不设置
     */
    private String outOrderNo;

    /**
     * 对账状态：1=未对账，2=已对账，3=待结算，4=已结算
     */
    private Integer dzState;

    /**
     * 记账凭证：支付接口回调更新支付状态的时候：已记账的才参与对账。交易流水号+100（未记账）（自动） 交易流水号+101（已记账）（自动）交易流水号+111（已记账）（手动）
     */
    private String certificateJz;

    /**
     * 商品信息
     */
    private String productSubject;

    /**
     * 商品信息
     */
    private String productBody;

    /**
     * 商户可结算金额（入金的时候，可以结算给商户虚拟账户的金额，比如商户充值金额，租户缴费金额，对账和结算时候用, 为0的时候，表示没有结算金额。	如果该笔费用不是结算给商户的，比如有租约保理的房租，则该笔费用不包含在可结算金额中。）
     */
    private BigDecimal canClearingAmount;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 删除标识。0:未删除，1：删除
     */
    private Boolean delFlg;

    /**
     * 创建用户ID
     */
    private Long createUserid;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新用户ID
     */
    private Long updateUserid;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
    public String getOrderNo() {
        return orderNo;
    }

    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
    public String getTradeAccount() {
        return tradeAccount;
    }

    public void setTradeAccount(String tradeAccount) {
        this.tradeAccount = tradeAccount;
    }
    public Integer getTradeAccountType() {
        return tradeAccountType;
    }

    public void setTradeAccountType(Integer tradeAccountType) {
        this.tradeAccountType = tradeAccountType;
    }
    public String getTradeAccountNo() {
        return tradeAccountNo;
    }

    public void setTradeAccountNo(String tradeAccountNo) {
        this.tradeAccountNo = tradeAccountNo;
    }
    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public Integer getUserType() {
        return userType;
    }

    public void setUserType(Integer userType) {
        this.userType = userType;
    }
    public Integer getOperationType() {
        return operationType;
    }

    public void setOperationType(Integer operationType) {
        this.operationType = operationType;
    }
    public Integer getPayWay() {
        return payWay;
    }

    public void setPayWay(Integer payWay) {
        this.payWay = payWay;
    }
    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public BigDecimal getPayAmount() {
        return payAmount;
    }

    public void setPayAmount(BigDecimal payAmount) {
        this.payAmount = payAmount;
    }
    public BigDecimal getFinalAmount() {
        return finalAmount;
    }

    public void setFinalAmount(BigDecimal finalAmount) {
        this.finalAmount = finalAmount;
    }
    public BigDecimal getDiscountAmount() {
        return discountAmount;
    }

    public void setDiscountAmount(BigDecimal discountAmount) {
        this.discountAmount = discountAmount;
    }
    public String getTradeUser() {
        return tradeUser;
    }

    public void setTradeUser(String tradeUser) {
        this.tradeUser = tradeUser;
    }
    public String getDsAccount() {
        return dsAccount;
    }

    public void setDsAccount(String dsAccount) {
        this.dsAccount = dsAccount;
    }
    public String getTradeQudao() {
        return tradeQudao;
    }

    public void setTradeQudao(String tradeQudao) {
        this.tradeQudao = tradeQudao;
    }
    public String getQudaoOrderNo() {
        return qudaoOrderNo;
    }

    public void setQudaoOrderNo(String qudaoOrderNo) {
        this.qudaoOrderNo = qudaoOrderNo;
    }
    public Integer getTradeResult() {
        return tradeResult;
    }

    public void setTradeResult(Integer tradeResult) {
        this.tradeResult = tradeResult;
    }
    public String getReturnCode() {
        return returnCode;
    }

    public void setReturnCode(String returnCode) {
        this.returnCode = returnCode;
    }
    public String getReturnMsg() {
        return returnMsg;
    }

    public void setReturnMsg(String returnMsg) {
        this.returnMsg = returnMsg;
    }
    public LocalDateTime getTradeDateFq() {
        return tradeDateFq;
    }

    public void setTradeDateFq(LocalDateTime tradeDateFq) {
        this.tradeDateFq = tradeDateFq;
    }
    public LocalDateTime getTradeDateZx() {
        return tradeDateZx;
    }

    public void setTradeDateZx(LocalDateTime tradeDateZx) {
        this.tradeDateZx = tradeDateZx;
    }
    public LocalDateTime getTradeDateZf() {
        return tradeDateZf;
    }

    public void setTradeDateZf(LocalDateTime tradeDateZf) {
        this.tradeDateZf = tradeDateZf;
    }
    public LocalDateTime getTradeDateJz() {
        return tradeDateJz;
    }

    public void setTradeDateJz(LocalDateTime tradeDateJz) {
        this.tradeDateJz = tradeDateJz;
    }
    public BigDecimal getTradeRate() {
        return tradeRate;
    }

    public void setTradeRate(BigDecimal tradeRate) {
        this.tradeRate = tradeRate;
    }
    public BigDecimal getCommissionFee() {
        return commissionFee;
    }

    public void setCommissionFee(BigDecimal commissionFee) {
        this.commissionFee = commissionFee;
    }
    public LocalDateTime getBeginTime() {
        return beginTime;
    }

    public void setBeginTime(LocalDateTime beginTime) {
        this.beginTime = beginTime;
    }
    public LocalDateTime getEndTime() {
        return endTime;
    }

    public void setEndTime(LocalDateTime endTime) {
        this.endTime = endTime;
    }
    public Integer getCheckState() {
        return checkState;
    }

    public void setCheckState(Integer checkState) {
        this.checkState = checkState;
    }
    public LocalDateTime getCheckTime() {
        return checkTime;
    }

    public void setCheckTime(LocalDateTime checkTime) {
        this.checkTime = checkTime;
    }
    public String getCheckUserid() {
        return checkUserid;
    }

    public void setCheckUserid(String checkUserid) {
        this.checkUserid = checkUserid;
    }
    public String getCheckFailReason() {
        return checkFailReason;
    }

    public void setCheckFailReason(String checkFailReason) {
        this.checkFailReason = checkFailReason;
    }
    public String getOutOrderNo() {
        return outOrderNo;
    }

    public void setOutOrderNo(String outOrderNo) {
        this.outOrderNo = outOrderNo;
    }
    public Integer getDzState() {
        return dzState;
    }

    public void setDzState(Integer dzState) {
        this.dzState = dzState;
    }
    public String getCertificateJz() {
        return certificateJz;
    }

    public void setCertificateJz(String certificateJz) {
        this.certificateJz = certificateJz;
    }
    public String getProductSubject() {
        return productSubject;
    }

    public void setProductSubject(String productSubject) {
        this.productSubject = productSubject;
    }
    public String getProductBody() {
        return productBody;
    }

    public void setProductBody(String productBody) {
        this.productBody = productBody;
    }
    public BigDecimal getCanClearingAmount() {
        return canClearingAmount;
    }

    public void setCanClearingAmount(BigDecimal canClearingAmount) {
        this.canClearingAmount = canClearingAmount;
    }
    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }
    public Boolean getDelFlg() {
        return delFlg;
    }

    public void setDelFlg(Boolean delFlg) {
        this.delFlg = delFlg;
    }
    public Long getCreateUserid() {
        return createUserid;
    }

    public void setCreateUserid(Long createUserid) {
        this.createUserid = createUserid;
    }
    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
    public Long getUpdateUserid() {
        return updateUserid;
    }

    public void setUpdateUserid(Long updateUserid) {
        this.updateUserid = updateUserid;
    }
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        return "TbPayOrder{" +
            "id=" + id +
            ", orderNo=" + orderNo +
            ", tradeAccount=" + tradeAccount +
            ", tradeAccountType=" + tradeAccountType +
            ", tradeAccountNo=" + tradeAccountNo +
            ", userId=" + userId +
            ", userType=" + userType +
            ", operationType=" + operationType +
            ", payWay=" + payWay +
            ", amount=" + amount +
            ", payAmount=" + payAmount +
            ", finalAmount=" + finalAmount +
            ", discountAmount=" + discountAmount +
            ", tradeUser=" + tradeUser +
            ", dsAccount=" + dsAccount +
            ", tradeQudao=" + tradeQudao +
            ", qudaoOrderNo=" + qudaoOrderNo +
            ", tradeResult=" + tradeResult +
            ", returnCode=" + returnCode +
            ", returnMsg=" + returnMsg +
            ", tradeDateFq=" + tradeDateFq +
            ", tradeDateZx=" + tradeDateZx +
            ", tradeDateZf=" + tradeDateZf +
            ", tradeDateJz=" + tradeDateJz +
            ", tradeRate=" + tradeRate +
            ", commissionFee=" + commissionFee +
            ", beginTime=" + beginTime +
            ", endTime=" + endTime +
            ", checkState=" + checkState +
            ", checkTime=" + checkTime +
            ", checkUserid=" + checkUserid +
            ", checkFailReason=" + checkFailReason +
            ", outOrderNo=" + outOrderNo +
            ", dzState=" + dzState +
            ", certificateJz=" + certificateJz +
            ", productSubject=" + productSubject +
            ", productBody=" + productBody +
            ", canClearingAmount=" + canClearingAmount +
            ", remarks=" + remarks +
            ", delFlg=" + delFlg +
            ", createUserid=" + createUserid +
            ", createTime=" + createTime +
            ", updateUserid=" + updateUserid +
            ", updateTime=" + updateTime +
        "}";
    }
}
